package masterMind;

import ewe.fx.Color;
import ewe.ui.Control;
import ewe.ui.Form;
import ewe.ui.Gui;
import ewe.ui.HtmlDisplay;
import ewe.ui.HtmlViewer;
import ewe.ui.Menu;
import ewe.ui.MenuBar;
import ewe.ui.MenuItem;
import ewe.ui.MessageBox;
import ewe.fx.Dimension;
import ewe.ui.SingleContainer;
import ga.MasterMind;
import com.t_arn.taLocalResource;

public class MasterMindGUI  extends Form{
	char[] colores = {'0', '1', '2', '3', '4', '5', '6', '7'};
	private MasterMind g;
	private boolean win;
	private SingleContainer contenedor = new SingleContainer();
	//                              470           70  40
	//                              300           70  25
	private int ancho = 230, alto = 470, n =(alto-70)/40;
	private int np=400, nj=10, nh=15, nc=40, nt=40, nm=20, nr= 200, codeMaker = 0, codeBraker = 0;
	private taLocalResource lang = new taLocalResource("mmastermind.lang");
	private HtmlDisplay hd = new HtmlDisplay(12,20);
	Dimension dimensionTablero;

	private Tablero tablero = new Tablero(alto-30, n);
	public void nuevo() {		
		g = new MasterMind(np, nj, nh, nc, nt, nm, nr);
				
		win =g.jugarOP(tablero, codeMaker, codeBraker);			
	
		tablero.addBalls(g.getCodigo(), n, 5);
		tablero.refresh();
		
		String historial = win?"<h1 align=\"center\"><font color=\"#0099FF\">"+lang.get("textoGanar")+"</font></h1>":"<h1 align=\"center\"><font color=\"#0099FF\">"+lang.get("textoPerder")+"</font></h1>";
		if(g.cheater) 
			historial +="<h1 align=\"center\"><br>"+lang.get("textoTramposo")+"<br></h1>";

		
		historial +="<h2> "+lang.get("textoCodigoSecreto")+" = "+String.valueOf(g.getCodigo()).substring(0, 5)+"</h2>";
		
		for(int i=0; i<g.nJ;i++) {
			historial +="<br> "+i+" -> "+String.valueOf(g.getHistoria(i)).substring(0, 5);
			historial +=" ["+g.getB(g.getHistoria(i))+", "+g.getW(g.getHistoria(i))+" ]";
		}
						
		hd.setHtml(historial);

	}
	public MasterMindGUI () {
		setPreferredSize(ancho, alto);		
		title = "MasterMind";
		addLast(LoadMenus()).setCell(VCONTRACT);
				
		contenedor.setControl(new Tablero(alto-30, n));
		addLast(contenedor);									
	}

	private MenuBar LoadMenus() {
		MenuBar mb = new MenuBar();		
		Menu m = new Menu();		
		MenuItem mSeparator =new  MenuItem();
		mSeparator.modifiers = MenuItem.Separator;				
			
		m.addItem(new MenuItem(lang.get("menuNuevo"), "imgs/iconos/Nuevo.png", Color.White));
		m.addItem(mSeparator);		
		m.addItem(new MenuItem(lang.get("menuSalir"), "imgs/iconos/Salir.png", Color.White));
		mb.addMenu(m, lang.get("menuArchivo"));
		
		m= new Menu();
		m.addItem(new MenuItem(lang.get("menuHistorial"), "imgs/iconos/opciones.png", Color.White));
		m.addItem(new MenuItem(lang.get("menuOpciones"), "imgs/iconos/opciones.png", Color.White));		
		mb.addMenu(m, lang.get("menuHerramientas"));
		
		m= new Menu();
		m.addItem(new MenuItem(lang.get("menuAcerca"), "imgs/iconos/AcercaDe.png", Color.White));
		m.addItem(new MenuItem(lang.get("menuTips"), "imgs/iconos/Tips.png", Color.White));
		mb.addMenu(m, lang.get("menuAyuda"));			
		return mb;
	}
	public boolean handleAction(String action) {
		if(action.equals(lang.get("menuSalir"))) {					
			exit(1);														
		}
		else if(action.equals(lang.get("menuHistorial"))) {
			msgHistorial();
		}
		else if(action.equals(lang.get("menuOpciones"))) {
			Opciones op = new Opciones(np, nj, nh, nc, nt, nm, nr, codeMaker, codeBraker);
			msgAyuda(op, lang.get("menuOpciones"));
			np = Integer.valueOf(op.nPoblacion.getText());
			nj = Integer.valueOf(op.nJugadas.getText());
			nh = Integer.valueOf(op.nHipermutacion.getText());
			nc = Integer.valueOf(op.nCruza.getText());
			nt= Integer.valueOf(op.nTransposicion.getText());
			nm= Integer.valueOf(op.nMutacionCircular.getText());
			nr= Integer.valueOf(op.nReset.getText());
			codeMaker = op.codeMaker.selectedIndex;
			codeBraker = op.codeBraker.selectedIndex;	
		}
		
		else if(action.equals(lang.get("menuNuevo"))) {
			tablero =new Tablero(alto-30, n);
			contenedor.setControl(tablero, true);
			nuevo();
			msgHistorial();
			
		} 
		else if(action.equals(lang.get("menuAcerca")))
		{							
			HtmlDisplay hd = new HtmlDisplay(12,20);
			hd.setHtml( "<h1 align=\"center\"><font color=\"#0099FF\">MasterMind</font></h1><br>"+
					"Fue escrito por <b>Roberto Loaeza Valerio</b> (2007)"+
					", sin embargo el software siempre puede ser mejorado, para esto usted (el usuario) "+
					"debe informar cuando algo no funcione como debiera o cuando pueda ser mejorado "+
					"enviando un reporte.");
			hd.modify(DisplayOnly,0);
			
			msgAyuda(hd, lang.get("menuAcerca"));						
		}		
		else if(action.equals(lang.get("menuTips")))
		{							
			HtmlDisplay hd = new HtmlDisplay(12,20);
			hd.setHtml( "<h1 align=\"center\"><font color=\"#0099FF\">mMasterMind</font></h1><br>"+					
					"En proceso..... "+
					"<br><br><h1 align=\"right\">Roberto Loaeza Valerio(2007)</h1>");
			hd.modify(DisplayOnly,0);			
			msgAyuda(hd, "Acerca de");						
		}
		
		
		return super.handleAction(action);
	}
	
	
	private void msgHistorial() {				
		hd.modify(DisplayOnly,0);			
		msgAyuda(new HtmlViewer(hd, HtmlViewer.DISPLAY_NO_STATUS_BAR|HtmlViewer.DISPLAY_NO_TOOL_BUTTONS|HtmlViewer.DISPLAY_NO_TABS), "Historial");
	}
	
	private void msgAyuda(Control ob, String titulo) {
		MessageBox mb = new MessageBox(titulo, "",MessageBox.MBOK);        
        mb.doBeep=false; 
        mb.addLast(ob);        
        mb.execute(getFrame(), Gui.CENTER_FRAME);        
	}
}



